import { useUserStore } from "@/stores"
let baseURL = ''
if (import.meta.env.DEV) {
  baseURL = 'http://116.63.38.70:33043'
}

if (import.meta.env.PROD) {
  baseURL = 'http://116.63.38.70:33043'
}


const prefix = '/hlapi/v1'
// 前置拦截器
const httpInterceptor = {
  // 拦截前触发
  invoke (options) {
    if (!options.url.startsWith('http')) {
      // #ifndef H5
      options.url = baseURL + prefix + options.url
      // #endif

      // #ifdef H5
      options.url = prefix + options.url
      // #endif
    }

    // 超时时间
    options.timeout = 10000

    // 添加小程序请求头标识
    options.header = {
      ...options.header,
      'content-type': 'application/json;charset=UTF-8'
    }

    const userStore = useUserStore()
    const token = userStore.profile?.token || ''

    // 添加token
    if (token) {
      options.header = {
        ...options.header,
        'Authorization': 'Bearer ' + token
      }
    }

    uni.showLoading({
      title: '加载中...',
      mask: true
    })
  }
}

/**
 * 添加拦截器
 */
uni.addInterceptor('request', httpInterceptor)


/**
 * 请求函数
 * 使用泛型
 */
export const http = (options) => {
  return new Promise((resolve, reject) => {
    uni.request({
      ...options,
      success (res) {
        uni.hideLoading()
        // 状态码200
        if (res.statusCode >= 200 && res.statusCode < 300) {
          const result = res.data
          // token错误、过期、刷新token失败等，需要重新登录
          if (result.code == '401' || result.code == '402' || result.code == '407') {
            const userStore = useUserStore()
            userStore.clearProfile()
            uni.redirectTo({
              url: '/pages/password_login/password_login'
            })

            reject(res)
          } else if (result.code == '400') {
            uni.showToast({
              icon: 'none',
              title: result.message || '请求错误!',
            })
            reject(res)
          } else {
            resolve(result)
          }
        }
      },
      fail (err) {
        uni.hideLoading()
        uni.showToast({
          icon: 'none',
          title: '网络开小差,换网络试试!',
        })
        reject(err)
      },
    })
  })
}